package converter;

import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

/**
 * Erweitert die Produktklasse um EBook-spezifische Datenelemente wie den Verlag oder die Sprache.
 * 
 * @author Patrick Bauer
 */
public class EBookElement extends XMLElement {
    private ArrayList<String> autor = new ArrayList<String>();
    private ArrayList<String> content = new ArrayList<String>();
    private String verlag = "";
    private String titel_lang = "";
    private String sprache = "";
    
    /**
     * Setzt den Verlag
     *
     * @param verlag der Verlag
     */
    public void setVerlag(String verlag) {
        this.verlag = verlag;
    }

    /**
     * Fuegt einen Autor hinzu
     * @param author ein Autor
     */
    public void setAutor(String author) {
        this.autor.add(author);
    }

    /**
     * Setzt den langen Titel
     *
     * @param title der lange Titel
     */
    public void setTitel_lang(String title) {
        this.titel_lang = title;
    }

    /**
     * Setzt die Sprache
     *
     * @param sprache die Sprache
     */
    public void setSprache(String sprache) {
        this.sprache = sprache;
    }

    /**
     * Fuegt einen Inhalt hinzu.
     *
     * @param content ein Inhalt
     */
    public void setInhalt(String content) {
        this.content.add(content);
    }


    /**
     * Erweitert die Anzahl der unbekannten allgemeinen Datenelemente um unbekannte <br>
     * EBook-spezifische Datenelemente.
     *
     * @return die Anzahl aller unbekannten Datenelemente
     */
    @Override
    public int countUnknown(){
        int i = super.countUnknown();
        
        if(this.verlag.isEmpty()) {
            i++;
        }
        
        if(this.autor.isEmpty()) {
            i++;
        }
        
        if(this.titel_lang.isEmpty()) {
            i++;
        }
        
        return i;
    }
    
    /**
     * Schreibt das eigene EBook-Produkt Objekt in valider Form in die uebergebene XML Datei.
     *
     * @param writer das Writer Objekt
     * @throws IOException wird geworfen bei Fehlern waehrend des Dateizugriffs
     */
    @Override
    public void write(FileWriter writer) throws IOException {
        writer.write("\t\t\t<eBook>" + System.getProperty("line.separator"));
        
        //title
        if(this.title.isEmpty()) {
            writer.write("\t\t\t\t<Titel unbekannt=\"1\"></Titel>" + System.getProperty("line.separator"));  
        } else {
            for(Object titel : this.title.toArray()) {
                writer.write("\t\t\t\t<Titel unbekannt=\"0\">" + titel.toString() + "</Titel>" + System.getProperty("line.separator"));
            }
        }
        
        //verlag
        if(this.verlag.isEmpty()) {
            writer.write("\t\t\t\t<Verlag unbekannt=\"1\"></Verlag>" + System.getProperty("line.separator"));  
        } else {
            writer.write("\t\t\t\t<Verlag unbekannt=\"0\">" + this.verlag + "</Verlag>" + System.getProperty("line.separator"));
        }
        
        //autor
        if(this.autor.isEmpty()) {
            writer.write("\t\t\t\t<Autor unbekannt=\"1\"></Autor>" + System.getProperty("line.separator"));  
        } else {
            for(Object autorItem : this.autor.toArray()) {
                writer.write("\t\t\t\t<Autor unbekannt=\"0\">" + autorItem.toString() + "</Autor>" + System.getProperty("line.separator"));
            }
        }
        
        //long title
        if(this.titel_lang.isEmpty()) {
            writer.write("\t\t\t\t<LangerTitel unbekannt=\"1\"></LangerTitel>" + System.getProperty("line.separator"));  
        } else {
            writer.write("\t\t\t\t<LangerTitel unbekannt=\"0\">" + this.titel_lang + "</LangerTitel>" + System.getProperty("line.separator"));
        }
        
        super.writeVeroeffentlicht(writer);
        
        //sprache
        if(!this.sprache.isEmpty()) {
            writer.write("\t\t\t\t<Sprache>" + this.sprache + "</Sprache>" + System.getProperty("line.separator"));
        }
        
        //content
        if(!this.content.isEmpty()) {
            for(Object contentItem : this.content.toArray()) {
                writer.write("\t\t\t\t<Inhalt>" + contentItem.toString() + "</Inhalt>" + System.getProperty("line.separator"));
            }
        }
        
        writer.write("\t\t\t</eBook>" + System.getProperty("line.separator"));
    }
    
}
